package com.zhou.framework.util;

import com.zhou.util.enums.AbstractEnum;
import lombok.Data;
import lombok.SneakyThrows;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;

/**
 * @author lang.zhou
 * @since 2023/2/19
 */
@Data
public class EnumClassReader<T extends AbstractEnum<E>,E> {

    private Class<T> clazz;

    public EnumClassReader(Class<T> clazz) {
        this.clazz = clazz;
    }
    /**
     * 枚举属性转为键值对集合
     */
    @SneakyThrows
    @SuppressWarnings("unchecked")
    public List<T> list(){
        List<AbstractEnum<E>> list = new ArrayList<>();
        Field[] fields = clazz.getFields();
        for (Field field : fields) {
            int fieldModifier = field.getModifiers();
            if (Modifier.isPublic(fieldModifier) && Modifier.isStatic(fieldModifier) && Modifier.isFinal(fieldModifier)) {
                Class<?> fieldClz = field.getType();
                if (AbstractEnum.class.isAssignableFrom(fieldClz)) {
                    AbstractEnum<E> item = (AbstractEnum<E>) field.get(null);
                    list.add(item);
                }
            }
        }
        return (List<T>) list;
    }

}
